package com.hiyee.cart.mapper;

import com.hiyee.api.mapper.MyMapper;
import com.hiyee.pojo.CartItem;
import com.hiyee.pojo.repo.CartInfoRepo;
import com.hiyee.pojo.repo.CartItemRepo;
import com.hiyee.pojo.repo.CartRecountRepo;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Map;

@Repository
public interface CartItemMapper extends MyMapper<CartItem> {

    /**
     * 根据购物车 id 和商品 id 查询明细
     *
     * @param Long cartId
     * @param Long productId
     * @return CartItem
     */
    public CartItem getByCartAndProduct(@Param("cart_id")Long cartId, @Param("product_id")Long productId);

    /**
     * 添加购物车明细
     *
     * @param CartItem cartItem
     * @return Integer
     */
    public Integer add(CartItem cartItem);

    /**
     * 更新购物车商品
     *
     * @return Integer
     */
    public Integer update(
            @Param("item_id")Long itemId,
            @Param("qty")Long qty,
            @Param("amount")BigDecimal amount
    );

    /**
     * 统计购物车商品数据
     *
     * @return Integer
     */
    public CartRecountRepo recount(@Param("cart_id")Long cartId);

    /**
     * 根据购物车 id 查询商品明细
     *
     * @param Long cartId
     * @return List<CartItemRepo>
     */
    public List<CartItemRepo> getByCartId(@Param("cart_id")Long cartId);

    /**
     * 选中/取消选中购物车商品
     *
     * @param Long itemId
     * @param Boolean isSelected
     * @return Integer
     */
    public Integer checkProduct(
        @Param("item_id")Long itemId,
        @Param("is_selected")Integer isSelected
    );

    /**
     * 删除购物车
     *
     * @param Long itemId
     * @return Integer
     */
    public Integer deleteProduct(@Param("item_id")Long itemId);

    /**
     * 更新购物车商品数量
     *
     * @param Long itemId
     * @param Integer qty
     * @return Integer
     */
    public Integer updateProduct(@Param("item_id")Long itemId, @Param("qty")Integer qty);

    /**
     * 根据商品 id 删除商品
     *
     * @param Long cartId
     * @param List<Long> productIds
     * @return Integer
     */
    public Integer deleteByProductId(@Param("cart_id")Long cartId, @Param("product_id")long[] productIds);

    /**
     * 查询结算的商品信息
     *
     * @param cartId
     * @return
     */
    public List<CartItemRepo> getSelectedItem(@Param("cart_id")Long cartId);
}